const express = require("express");
const path = require('path');

// 创建路由器对象
const router = express.Router();

//导入操作用户对象
const UserModel = require('../db/models/UserModel');

//导入状态码文件
const { RES_CODE } = require('../utils/constants');

//导入解析复杂表单数据模块
const formidable = require('formidable');
const md5 = require("md5");


// 创建一个解析表单数据的对象
const readFile = formidable({
    uploadDir: path.resolve(__dirname, "../public/upload"), // 保存的目录
    keepExtensions: true, // 生成的文件带扩展名  默认不带
});


//添加用户的接口
router.post('/user', async (req, res) => {
    readFile.parse(req, async (err, fields, files) => {
        if (err) {
            return res.json({
                code: RES_CODE.SERVER_ERROR,
                message: "上传文件失败"
            })
        }

        // 获取字段对象
        let { username, pwd } = fields;

        //获取文件对象
        let { profile } = files;

        let imgUrl = '/upload/' + profile.newFilename;

        // 把数据添加到数据库里 - 图片存的是图片路径。

        // 用户名判断 - 如果数据库中 存在这个用户名 - 拒绝插入数据库
        let hasUserName = await UserModel.findOne({ username });
        if (hasUserName) {
            return res.json({
                code: RES_CODE.DATA_ERROR,
                message: "用户名被占用"
            })
        }

        //插入数据库
        let result = await UserModel.create({
            username,
            pwd: md5(pwd),
            profile: imgUrl
        });

        res.json({
            code: RES_CODE.SUCCESS,
            message: "添加成功",
            data: result
        })
    });
});

//获取分页列表
//page 当前页码  1
//limit 当前一页显示几条  5
router.get('/user/:page/:limit', async (req, res) => {
    let { page, limit } = req.params;

    //数据库读取数据 - 根据前端发送的数字筛选
    let skip = (page - 1) * limit;

    //筛选显示部分数据
    let users = await UserModel.find().skip(skip).limit(limit);

    //获取数据集合的总数
    let total = await UserModel.count();

    res.json({
        code: RES_CODE.SUCCESS,
        message: "获取列表成功",
        data: {
            users,
            total
        }
    });
});


//获取某个用户信息
router.get('/user', async (req, res) => {
    let { id } = req.query;

    //去数据库中查找相应数据
    // UserModel.findOne({_id:id});
    try {
        let user = await UserModel.findById(id);
        res.json({
            code: RES_CODE.SUCCESS,
            message: "获取成功",
            data:user
        })
    } catch (err) {
        res.json({
            code: RES_CODE.DATA_ERROR,
            message: "获取失败，id错误 " + err,
        })
    }

});


//更新用户接口
router.put('/user', (req, res) => {

    //获取到前端发来的表单数据
    readFile.parse(req, async (err, fields, files) => {

        if (err) {
            return res.json({
                code: RES_CODE.SERVER_ERROR,
                message: "更新失败，原因：" + err
            })
        }

        //获取表单数据 - 字段数据
        let { _id, username } = fields;

        console.log(_id);

        //获取文件数据
        let { profile } = files;

        //数据库里存的是图片的路径
        let imgUrl = '/upload/' + profile.newFilename;

        //将数据插入到数据库 - 更新
        await UserModel.updateOne({ _id }, { username, profile: imgUrl })

        res.json({
            code: RES_CODE.SUCCESS,
            message: "更新成功"
        })

    })

});


//删除用户接口
router.delete('/user/:id', async (req, res) => {

    let { id } = req.params;

    //通过id查找数据库响应数据，进行删除
    try {
        await UserModel.deleteOne({ _id: id });
        res.json({
            code: RES_CODE.SUCCESS,
            message: "删除成功",
        })
    } catch (err) {
        res.json({
            code:RES_CODE.DATA_ERROR,
            message:"删除失败，原因："+err
        })
    }
});


module.exports = router;